
# SUBDIRS=./lib/hashmap



# CC = clang
# LD = clang
# SRCS = $(wildcard *.c)
# OBJS = $(patsubst %c, %o, $(SRCS))
# # -I指定头文件目录
# INCLUDE = -I./lib/hashmap
# # -L指定库文件目录，-l指定静态库名字(去掉文件名中的lib前缀和.a后缀)
# LIB = 
# # 开启编译warning和设置优化等级
# CFLAGS = -Wall -O2 -g

# TARGET = test

# .PHONY:all clean

# all: $(TARGET)
# # 链接时候指定库文件目录及库文件名
# $(TARGET): $(OBJS)
# 	$(LD) -o $@ $^ $(LIB)
 
# # 编译时候指定头文件目录
# %.o:%.c
# 	$(CC) -c $^ $(INCLUDE) $(CFLAGS) 

# clean:
# 	rm -f $(OBJS) $(TARGET)

#设置编译器
.PHONY:clean all
CC=gcc
CFLAGS=-Wall -O2 -g

SUBDIRS=lib debug
ROOTDIR=$(CURDIR)
#bin文件所在的目录
BINDIR=$(ROOTDIR)/debug/bin
#最终bin文件的名字，可以更改为自己需要的
BIN=myapp
#目标文件所在的目录
OBJDIR=$(ROOTDIR)/debug/obj

#将以下变量导出到子shell中，本次相当于导出到子目录下的makefile中
export CC CFLAGS BIN BINDIR OBJDIR ROOTDIR


CURINCDIR=$(CURDIR)
CURSRCDIR=$(CURDIR)
CUROBJDIR=$(OBJDIR)

INCS=-I$(CURDIR)/lib/hashmap/include
SRCS=${wildcard $(CURSRCDIR)/*.c}
OBJS=$(patsubst %.c, %.o, $(CUROBJDIR)/$(notdir $(SRCS)))


#注意这里的顺序，需要先执行SUBDIRS最后才能是DEBUG
all:$(SUBDIRS) $(OBJS)

#保证debug最后编译
debug:$(OBJS)

#递归执行子目录下的makefile
$(SUBDIRS):ECHO
	make -C $@

#当前目录下的makefile
$(OBJS):$(CUROBJDIR)/%.o:$(CURSRCDIR)/%.c
	$(CC) $(CFLAGS) $(INCS) -c $^ -o $@

ECHO:
	@echo $@

clean:
	RM -rf $(OBJDIR)/*
	RM -rf $(BINDIR)/*

